import 'package:flutter/material.dart';
import 'package:flutter_getx/utils/http.dart';
import 'package:flutter_getx/utils/toast.dart';
import 'package:get/get.dart';

import 'state.dart';

class HomeLogic extends GetxController {
  final HomeState state = HomeState();

  @override
  void onInit() {
    // TODO: implement onInit
    super.onInit();
    getNotifyList();
  }

  @override
  void onReady() {
    // TODO: implement onReady
    super.onReady();
  }

  @override
  void onClose() {
    // TODO: implement onClose
    super.onClose();
  }

  void getNotifyList() async {
    try {
      // 请求数据
      var res = await http.get('/announcement');
      if (res['code'] != 10000) return ToastUtil.showError('获取数据失败');

      // state.notifyList.assignAll((res['data'] as List).map((e) => Map<String, dynamic>.from(e)).toList());
// 使用 Obx 时，必须通过 GetX 提供的方法（如 assignAll）来更新数据，
// 以确保响应式更新机制正常工作。这种方式不仅提升了性能，也确保了数据的一致性和类型安全。
// assignAll: 替换整个列表。
// add: 向列表添加新元素。
// remove: 从列表中删除元素。
      state.notifyList.assignAll((res['data'] as List).map((e) => NotificationItem.fromJson(e as Map<String, dynamic>)).toList());
      ToastUtil.showSuccess('首页社区公告数据成功');

      // print('${state.notifyList}');
    } catch (e) {
      debugPrint('请求失败：$e');
      ToastUtil.showError('获取数据失败');
    }
  }

  // 详情页数据
  void getNotifyDetail(String id) async {
    try {
      var res = await http.get('/announcement/$id');
      if (res['code'] != 10000) return ToastUtil.showError('获取详情失败');

      print('${res['data']}');
      // 方式1：转换为 NotifyDetailMap 对象
      state.notifyDetail.value = NotifyDetailMap.fromJson(res['data'] as Map<String, dynamic>);

      // 或者方式2：直接赋值 Map
      // state.notifyDetail.value = res['data'] as Map<String, dynamic>;

      ToastUtil.showSuccess('获取详情成功');
    } catch (e) {
      debugPrint('请求失败：$e');
      ToastUtil.showError('获取详情失败');
    }
  }
}
